package wrapper;

/**
 * 包装类
 * 包装类的出现是让基本类型以"对象"形式呈现。
 * 因此包装类的每个实例中仅仅保存了对应的基本类型的一个值。
 * 基本类型             包装类
 * byte                Byte
 * short               Short
 * int                 Integer
 * long                Long
 * float               Float
 * double              Double
 * char                Character
 * boolean             Boolean
 *
 */
public class IntegerDemo1 {
    public static void main(String[] args) {
        //让基本类型以对象形式表示  基本类型->包装类
        int i = 128;
        Integer i1 = new Integer(i);
        Integer i2 = new Integer(i);
        System.out.println("i1:"+i1);
        System.out.println("i2:"+i2);
        System.out.println(i1==i2);//false
        System.out.println(i1.equals(i2));//true

        double d = 123.123;
        Double d1 = new Double(d);
        Double d2 = new Double(d);
        System.out.println("d1:"+d1);
        System.out.println("d2:"+d2);
        System.out.println(d1==d2);
        System.out.println(d1.equals(d2));

        /*
            java建议将基本类型转换为包装类时，使用静态方法valueOf进行
            对于Integer而言，valueOf总是重用1字节之内的整数对象
         */
        i=127;
        Integer i3 = Integer.valueOf(i);
        Integer i4 = Integer.valueOf(i);
        System.out.println(i3==i4);//i在-128-127之间会重用对象
        System.out.println(i3.equals(i4));

        d = 123.123;
        Double d3 = Double.valueOf(d);//Double的valueOf没有任何多余效果
        Double d4 = Double.valueOf(d);
        System.out.println(d3==d4);
        System.out.println(d3.equals(d4));

        /*
            数字类型的包装类提供了转换为基本类型的方法
         */
        i = i1.intValue();
        System.out.println(i);
        byte b = i1.byteValue();
        System.out.println(b);
        d = i1.doubleValue();
        System.out.println(d);

    }
}
